// 生成器函数回顾

function* foo() {
  console.log("start");
  console.log(yield);;
  console.log("middle-1");
  console.log(yield "middle-2");
  console.log(yield function (a, b) { return a + b; });
  console.log(yield);

  try {
    yield;
  } catch (error) {
    console.log(error);
  }
}

const genertor = foo();

console.log(genertor.next()); // 正式开始执行函数体内容  执行 start 到yield停止

console.log(genertor.next()); // 遇到yield停止运行，等待下一次next调用
// 如果yield后面跟了值的， 就会返回出去  执行yield到 middle2停止

console.log(genertor.next()); // 返回了函数 done：false  执行middle2 到function停止

console.log(genertor.next(function () { console.log("middle-3"); }));
// 如果next传了值，yield就能返回值 执行function到yield停止
console.log(genertor.next());   // 执行yield到yield停止

// console.log(genertor.next("error---"));
console.log(genertor.next(new Error("真正的错误"))); // 传递报错 执行yield到结束
// console.log(genertor.throw(new Error("真正的报错")));

console.log(genertor.next());// 执行结束， done：true


console.log(genertor.next());